{
 "cells": [
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "## Seq2Seq",
   "id": "80614a6a630cb275"
  },
  {
   "cell_type": "markdown",
   "id": "e25ee3b07acf5d94",
   "metadata": {},
   "source": [
    "在前面的RNN中，在训练时，如果我们输入的序列长度是5，那么输出的序列长度也是5，而Seq2Seq则输入和输出的长度可以是不一样的，因此非常适合做文本翻译的任务。"
   ]
  },
  {
   "attachments": {
    "1a5c1565-2b8a-408f-b8d2-9058947feb62.png": {
     "image/png": "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aERYSDfas2pWkyZN5s6d+/bbb2dlZf38888jRowwvvXy5csLFiw4d+6c4UNZX1/fRYsWderUyTTV0aNHY2Jirl+/bhgJDQ1duHCh8TvXOp2uR48eQoiZM2dGRER89NFHP/74482bN6VbGzRoMH/+/N69e9fa3QVqS2FhYUxMzP79+0tKSqQRFxeXN954Y/jw4cbTSktL9+3bt3379gsXLhiPDxky5I033pD62CTGJ8vgwYNjYmLi4uJKSkoiIyOjoqKOHz8+ffp0IcSWLVsaNWr09ttvnz17tqysTIodO3bsjBkz7Oz+7wOLoqIiKdvs2bMjIiKkQXOTSHJychYsWHDy5Mny8nJppE2bNh9++OGmTZt27drl7u7+888/11xdAfX85z//mTFjhhBi27Ztbdq0MYxfuHBh9erVR48eNYw4ODgMHjx4/vz5FlopcJ9Vq1Zt2bLFxcXl8OHDhsHIyMizZ8/26NFj5cqVmzdv3rZt240bN6SbfH19//73v7dr107669dff/33v//dELh27dq1a9cKIRwdHePi4gzjCp/m1qxZs2nTJicnp6NHj3711VebN2/OyMgQQiQkJEgT9Hr95s2bP/vss7t370ojNjY2I0eOnDVrlqwxoupTb968efv37ze+v9IP0l2urCzGyzt27NjSpUsvXbok3eTs7PyXv/zlueeeM63w6dOnFy5cmJ6eLv3Vzs6uX79+CxcujIiISElJGTBgwLvvvqvs3woAUAOuX7/+8ccf79271/A2hYzy5xrpv13r1q3btWtXYWGhYdDNze21114bOXKk6RtQ+/fvX79+fUpKivHkmTNnPv/888bTEhMTIyMje/bsOWPGjICAgIe+04+j6rTfAQAAAAAAAI8td/eG7u6VNt5JjsefXLFqnV6vnzE1aua0KDrwalbv3r01Go1er//999+Nxw8ePLhgwYLCwkIXF5fg4GA7O7vExMSMjIxJkyYtXLhw8ODBxpM//vjjTZs26fV6Dw+Pdu3a3b59OykpKT4+fvTo0Z9++mlgYKDsoOXl5YsXL969e7e7u3toaGhWVpa0tcmbb745a9YsQ3sQYBXS0tJmz5595coVW1vb4ODgxo0b//7775mZmYsXLz5//vzbb79tmPnHH38sWLBA2nenRYsWXl5eKSkp6enp33///fXr19evX19h/qVLlx46dKjCm7Kz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97vfNTRs/fr1ic3+9u7dO2PGjIceemjLli31BxzwI5+E7t27N1LAATsn2rdvX1tbm/quRqk8SKK7IoTQo0ePAz7IPuvnQX648sorq6ur//CHP6xateqOO+74+c9/Pm7cuIsvvri0tDTTpcHBNfTynriQyjSR7jSXUFRUlOxmS0ocMS5fvryRI8bk4WWk0WvTps3+K9F26NAhcSH5a0kuSdvQxLf/gwDQjA4//PDWrVvv2bNn9erVCxYs6N+/f/K1uiGpzzXr1q375JNPQgiJZcj3F4vFunfv/sEHHyS69BLuvPPOm2++ubq6ev78+fPnzx84cOD48eNHjx69f7P7/nbv3r1gwYL33nsvsfNAQ5MLSU1pvwMAAACAgrVx06a333k3cSHTtRSoP//5z4kPGpPtd3v27ElcGD169D5rmSQlT3wnBrdv3/6cc85p6Cn2/556Q81GmzdvTiwooveOnPDpp58mLpx44ol9+vRpaFgyL3feeeczzzwTQjj++ONHjBhxzDHH9O7du3fv3rfccsvChQsPeN8sycLGjRsTFxr60Cv1bj/IIW3btr3rrrsWLlz4y1/+csGCBRs2bPj5z38+a9asu+66K7FbOuS3dKe5hJKSkv0bERJHjH379h06dGhDj5Ps4cuG6G36n/cmDU18n332WctUAlCYvvnNb1500UXTp0+fM2fOz3/+84ceeuiyyy67/PLLDz/88Ibukvpck2guT7SMN15G/W8Z9erV69FHH33mmWemT5++atWqt9566/bbb589e/Zdd93VyJa427dvnz179syZMzdt2tS6deuLL7746quv1n53UNrvAAAAAICcsXPnzsSOJ126dDnrrLMSVyY/Xr3sssv+7u/+rvFHSAz+9NNPb7/99oOeuU7asWPHAa9PfBO9V69e6fwQkDE9e/YsKirau3fviBEjrrnmmsYHv/HGG4neu/Hjx9900031b9qV9dvjJBfhSyyWub+ampqWrQhaTmVlZWVlZXV19cMPP/zMM89s2LDhW9/61hNPPHHYYYdlujSIVlrTXOP69OmzcePG7t2733HHHSneJbPRS058NTU1iR1764vH42vXrm2BMgAKWVlZ2Xe+852rr776oYceevLJJ3/5y1/OmDHj4osvvuKKKxIL5+8j9bmmd+/excXFn3766erVqw84IPk6P2DAgPrXt2rV6ktf+tKYMWPmz58/bdq0N95444033vje9773i1/8Yv8H2bRp08yZM2fPnr19+/bWrVtfcsklV199deOrm5OU6tklAAAAAIDM2rt3709/+tNEx9sdd9yR3KEs2X63bNmygz5IYnBdXd0777yT+lMfcPD27dsXLFgQQujfv3/qDwUZ1Lp168THJ8uXLz/o4L/97W+JpR8vvfTS+tfH4/GVK1dGWWYzKC0tTawz8cYbb+x/6549e1asWJGJuqDllJeX/+AHP/ja176W+DC1qqoq0xVB89tnRbe0prnGJY4Y33nnneSKeilKJXpRrMCaPB7+61//uv+t1dXViV0LAYhaWVnZt7/97Tlz5owbN+6zzz575JFHxo4d+6//+q8fffTRPiNTn2tatWqVGPyXv/zlgAOWLVtWV1e3f/tdQiwWGzly5K9+9avBgweHEF5//fXt27fXH1BTU/OTn/xkzJgx06dPr6uru/TSS+fMmfPP//zPeu9Sp/0OAAAAAMgBS5cuHT9+/Jw5c0IIF1100SmnnJK8qXv37gMHDgwhPPTQQwdcpi65UUsIYcSIEW3btg0hTJky5YBPVH9w0iuvvPLWW2/tc+WsWbN27twZQvjKV75yCD8ZtKjTTz89hPDyyy8nuuv2sXfv3uRuzrW1tYmPauLxeP0xc+bMaWg9yKwybNiwxHbV+/+kM2fOTO5OC/ntjDPOSFxIfCILeaNdu3YhhLfffnuf61Of5ho3atSoEMLmzZtnzJhxwAEHPGJMOmD0EjUfsOxD17dv327duoUQHnnkkcQBan33339/sz8jAI3o1q3brbfe+tRTT40bNy6E8Jvf/ObCCy/8+OOP649Ja645//zzEydGfv/73+8/ctq0aSGEHj161D9Vso9YLJaYJfeZnnbv3n3BBRc89thj8Xj8sssumzNnzne+8539F1KlcdrvAAAAAIDssn79+qqqqqqqqvnz5//Xf/3XT3/604kTJ1511VUrVqyIxWIXXXTRLbfcUn98LBa7+eabQwgbN26cOHHie++9l7yprq5u1qxZ48ePT17TtWvXK664IoTw2muv3Xnnndu2bUvetHnz5p/+9Kc/+tGP9i/ps88+u+WWWxYvXpz850MPPfTggw+GEEaOHFlRURHNbwKa37XXXltaWhqPx2+99dZXXnkleX08Hn/ttdfGjRuXXJWhvLw80akwderU5OoIL7zwwj333NO6desMlZ+GiRMntmrVKoRw8803Jxcf2rt378MPPzxlypSOHTtmukBoZrW1tddff339lqO6urqZM2cmLh9//PGZKw2aX8+ePUMIixYtSmwynjyiS32aa9yoUaOGDh0aQnjwwQcffvjh+uvVVVdX33TTTXPnzk38M/Xo9erVK3HhpZdeSkys9Q9ED1Hr1q0nTJiQOKC97rrrklvN7tix47vf/e78+fPbt2/fXM8FjXv++ecvu+yyn/3sZ5kuBDKva9eut95669y5cy+//PLi4uJ9Fm1Nfa4JIYwfPz6xst2dd945a9as5ODt27d/97vf/dOf/hRCuPXWWxPfNgwhvPrqqz/84Q8TuwckbNu27YknnkhsZdu5c+fk9fF4vFWrVuPGjXvqqaf+6Z/+KdHMTbqKM10AAAAAAMD/8uKLL7744ov7Xz9w4MDbbrvtuOOO2/+mYcOGXXHFFY888siSJUsuu+yyHj169O7de926datXr/7ss8/qn1kOIVx55ZWLFy+uqqp6+umnn3vuub59+3bp0mXVqlWJE9OjR4/e//EvueSS119//ZprrikrKzvyyCPffffdxNfQy8vLb7vttmb96SFahx9++G233fb9739/w4YNN998c+fOnQcMGLBz5873339/n23pRo0addRRR7333nvPPPPM888///nPf76mpqampmb8+PHLli3L/o0s+/XrN2HChAceeCDRiNC1a9eysrLq6updu3aNHz9+9+7djz32WKZrhGa2YMGCq6666ogjjhgwYMDu3bvffvvtxEJf3/zmNy1hQp754he/+Itf/GLTpk1jx4496qijampqXn311bSmuYP653/+50mTJtXU1Nx///2/+tWvBgwY0Lp16/fee2/r1q0hhPrLC6UYvcMPP3zkyJHz5s2bN2/e6NGje/To0atXr2Zcl27s2LF//OMfX3vtteXLl48ZM6Zv375t2rSprq6OxWI//vGP/+3f/q26urq5ngsacf/9969Zs+bdd98dO3bsMccck+lyIPOOPPLIb33rW1ddddVhhx22z02pzzXFxcU/+tGPbr311o8++ujuu+++//77y8vLd+zYsXr16r1797Zq1eqaa65JLm6X+NLgk08+OWfOnO7du/ft23fdunWrVq2Kx+OtW7e+/fbb69dQUlIyd+7cI488MvrfRD6z+h0A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IC6gRgRkF0IIJCHz/TH3wpBAPAPJhMHf7y94M89znnkz78zkzDPn3TF58uSXXnqpTu9EKPn5+WPGjHn++ednzZr1q1/96uc//3n0BbGwsPDnP/95eXl5XRcINS/8e0U4QOTm5i5btmzBggUrV67Mzc3dvHlz9F3WpZdeOn369KKiouuuu27ixIk79/eLRCKzZs269dZb//SnP4W5lvBRRx01cODAd999N/oe7Nxzz925HfmyZctuv/32ww8/PHr9oOixrrzyyp3dfqWlpTvbzfv3778z5852ixkzZowZMyYrK2tn2fsvIyNjwoQJN9xww8aNGy+77LKbbropuh1tcXHxH/7whzlz5jRs2HDnXmdwwHrppZfuvffeoUOHOjd74NiX9jv2aMaMGdE+8eh/N27ceMMNN7z++uvp6em//OUvTzrppKoh7dq1u+uuu37yk5+89dZbZ5xxxvXXXz9mzJjoRcWXLVtWr169Xr0qdzr+8Ic/7Nq1689//vPp06cvXrx4/fr1mzdv7tOnz0033dSqVauE3FFgl969e5966qmDBg0aNWpUpa9HVKOiomLWrFlVW2yB2hOJRF5//fXozrNXX331bbfddu21106cOHGPW8ADNWvs2LGV9tDZo5deeqlq+93cuXObNGnyX//1X1ddddWKFSuys7Oj3XhHHXXUHpNMmTJl8eLF48ePz8/PD4LguOOOu+uuu5YtW1ZDdwUIJk+evGjRogEDBowYMeLJJ5989NFHjznmGN8E4zto3NhTx439lneSc+a9c+sdkyKRyNU/mnDNlRN04MWlRYsWP/3pTy+44IKsrKw93mDs2LGzZs265JJLWrdu3aJFi6VLl0bfSHTp0uUXv/hF7C3T09N///vfX3fddStWrLjxxhtvu+22/Pz84uLi5cuXV1RUpKWlXXLJJbGbHG3evPmxxx6bNGlS9KIIy5YtW7t2bfRSRpdffnls5r59+z733HMusst3x2uvvfbaa69VHe/Ro8fEiROr7jsZBMGQIUPOOeecKVOmLFq0aNy4cW3btm3fvv3q1auXL1++Y8eO5s2bx974/PPPf/fdd+fPnz99+vQXX3yxY8eOOTk5hYWF0W1t9/iNmrFjx7799ttVnwry8/MnTpxYo/ce4hP+wT9+/Pjnnntu+/btN95446RJk7p167Z06dItW7b86U9/+tnPfhaJROr0fny7q666auHChV999VV05Xbt2nXz5s0rVqxo2bLlLbfcctFFF9V1gVDDwr9XhAPEmDFj/vKXv2zYsOHkk0/u0qXLqlWr3nzzzei+IhMnTvzNb36zdu3aa6+9tnnz5p07d966devnn38e7+6rP//5z6+55ppVq1bddttt9913X+fOnTMyMj777LNNmzYFQRB7deR58+ZdcMEFzZo169y58/bt2z/55JPo9mJXXHFF7BetmzRpMnz48NmzZ8+ePXv06NFt27Zt165dDV6X7uSTT3711Vdnzpy5ZMmSk046qWPHjvXq1Vu2bFlKSsof//hH55NJCrfddtvKlSuXLl168sknazk4QKTWdQEHiY8//vjrr7+O9ncHQfD222+feeaZr7/+etOmTe+6665qPtrv2bPnI4880q9fv82bN//nf/7nU089FQTBCy+8EO3k22M3T6NGjYYOHRoEweeff7558+bU1NQjjjiipKSklu8ifFdUVFTEdftf/vKXJ554Yvjeu5KSkltuuWXZsmWpqamHHnroPtUIxGH79u1PP/30uHHjfvrTn86cOfOrr746//zzr7rqqh07dtxwww1//vOffY0JDgTl5eXRN7SxrQkfffTRqlWrhg0bNmzYsAsuuCD6HcTbb789elpzj0aPHj1w4MCdpzvz8vIee+yxK664IiF3Ar4T3nvvvSAIbrjhhosvvviSSy7ZOQJQG3JycvbW3NauXbt77rmnX79+a9euXbx48fbt2xs0aHDSSSc9/PDDsRtTRPXo0WPatGljx45t1KjR9u3bP/zww8LCwpSUlD59+jzwwAOXXXZZ7I379++fm5tbXl7+2WefzZ49e+3atZmZmaeddtq9997bsmXL2Fs2adJE7x3fTRkZGfn5+cc74HKPAAAgAElEQVQee+yll1564403TpkyZY+9d1HXXnvtrbfe2q5du4qKihUrVsyZM+eLL76IRCLHHXfcLbfcEnvLhg0b3n333T/+8Y8bN25cVla2bNmyuXPnrl69ulGjRuecc86//du/VU0efSoYMGBApaeChx56qOpTASRYyAd/p06dbr755o4dO0bbeubPn5+VlfX73/9+b986O9C0bt166tSpxx57bFpaWllZ2ZIlS9auXVtQUDB58uSdr5t73EceklT494pwgDj77LNPPPHE6EUKohcA2vmj0aNHT506dcCAAampqRs2bJg/f/6SJUu2bdvWv3//G2+8MfraFEZ+fv60adNOPPHEevXqFRcXL1q06N133920aVNubu7PfvazE044IXqzevXqjRw5Mj09fePGjQsWLFi8eHFZWVl+fv5vf/vb6CmmWBMnToxuLbh9+/Yvvvhi5/Uma0Rqauott9wyYcKEBg0aRCKRwsLCpUuX5ufn//d///eoUaOinxnl5OTU4BGhxg0aNCj6Liv8UqW2pRz4X51JCpMmTZo8eXJOTs6LL76YkpIyf/78q666qkOHDjfffHOlv/Mvv/zyefPm3XXXXdEWuqjS0tLf/e53hYWF99xzz+bNm08//fTi4uKbb75551VeS0pKlixZ8sYbb7z88surVq0KgqBx48bHH3/8ihUr3n777Wi3UF5e3siRI/v06ZOXl9exY8eafRGCg9iOHTvS0tJ2/vvSSy99//33J06c+IMf/GA/M3/zzTenn356dnZ2VlZWvXr1MjIyNm7cuGrVquj7tnHjxl1//fU1cQ+AIAiC22+//cEHH7z++uvHjRsXHRk/fvwnn3ySnp4e3eqiT58+F1100ZFHHhlt7rn//vvvuOOO6HvTH//4xyeeeKLrkUCNu/rqq2fOnHnbbbdVvfpdWVlZampq9CW4vLz86aef/uMf/9iyZct//vOfOxfjL37xixdeeOE3v/lN9ErSjz322M0337xjx46MjIwRI0Z06tSpXbt2OTk50e0MNmzYUK9evezs7EgksiNGeXl5eXn50KFDc3Nz62IO4GDzk5/85PXXX584ceIpp5zyu9/97rnnnvt//+//nXLKKXVdFxyIbrtzkqvfJUBxcfHixYtbtGjRqVOnnZscVWPVqlVffPFFTk5Op06dMjMz93ibSCTy5Zdfrl27dvv27a1bt87NzQ3/pTtgb4qKipYuXVpaWtqmTZs2bdpU3726Zs2azz77rF69em3atGnVqtXOc3dRpaWl0S+1XnPNNeedd94+PBVAIoV58O/YsWP58uUrV67Mz89vvfet7Q9kpaWln376aXl5ea9evaKvsPPmzYt+O+7xxx/v2rVrXRcINcZ7RZLRunXrCgsLo506Vf84LS0t/eyzz9avX9+qVas2bdpEdyDZBxUVFcuXL//qq6+aNm3atm3bZs2aVT1WUVHR8uXL169fn52d3bZt21atWu3tj+Vo//rXX3+d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"
    }
   },
   "cell_type": "markdown",
   "id": "68d381b7-ec20-44db-9497-15eb86bea6f8",
   "metadata": {},
   "source": "![94664335-31c2-40df-afcf-3c174740c5f0.png](attachment:1a5c1565-2b8a-408f-b8d2-9058947feb62.png)"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "<bos> Deep learning is interesting <eos>\n",
    "\n",
    "Deep learning is interesting <eos>\n",
    "<bos> Deep learning is interesting"
   ],
   "id": "5abccb806381a966"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-07-07T13:46:01.076962Z",
     "start_time": "2025-07-07T13:46:01.073849Z"
    }
   },
   "cell_type": "code",
   "source": "# !pip install jieba",
   "id": "2a870f7da0420093",
   "outputs": [],
   "execution_count": 377
  },
  {
   "cell_type": "code",
   "id": "4333c824dd487f82",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-07-07T13:46:01.102025Z",
     "start_time": "2025-07-07T13:46:01.096614Z"
    }
   },
   "source": [
    "from collections import Counter\n",
    "\n",
    "import jieba\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "import torch.optim as optim\n",
    "\n",
    "# 自定义简单数据集\n",
    "data = [\n",
    "    (\"你好，今天天气真好！\", \"Hello, the weather is nice today!\"),\n",
    "    (\"你吃饭了吗？\", \"Have you eaten yet?\"),\n",
    "    (\"深度学习很有趣。\", \"Deep learning is interesting.\"),\n",
    "    (\"我们一起学习吧。\", \"Let's study together.\"),\n",
    "    (\"这是一个测试例子。\", \"This is a test example.\")\n",
    "]\n",
    "\n",
    "\n",
    "# 中文分词函数\n",
    "def chinese_split(text):\n",
    "    return list(jieba.cut(text))  # 使用结巴分词\n",
    "\n",
    "\n",
    "# 英文分词函数\n",
    "def english_split(text):\n",
    "    return text.lower().split()\n",
    "\n",
    "\n",
    "# 处理原始数据\n",
    "chinese_sentences = [chinese_split(pair[0]) for pair in data]\n",
    "english_sentences = [english_split(pair[1]) for pair in data]\n",
    "\n",
    "chinese_sentences, english_sentences"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "([['你好', '，', '今天天气', '真', '好', '！'],\n",
       "  ['你', '吃饭', '了', '吗', '？'],\n",
       "  ['深度', '学习', '很', '有趣', '。'],\n",
       "  ['我们', '一起', '学习', '吧', '。'],\n",
       "  ['这是', '一个', '测试', '例子', '。']],\n",
       " [['hello,', 'the', 'weather', 'is', 'nice', 'today!'],\n",
       "  ['have', 'you', 'eaten', 'yet?'],\n",
       "  ['deep', 'learning', 'is', 'interesting.'],\n",
       "  [\"let's\", 'study', 'together.'],\n",
       "  ['this', 'is', 'a', 'test', 'example.']])"
      ]
     },
     "execution_count": 378,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 378
  },
  {
   "cell_type": "code",
   "id": "48ec47fe0c16591b",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-07-07T13:46:01.123884Z",
     "start_time": "2025-07-07T13:46:01.120389Z"
    }
   },
   "source": [
    "# 处理特殊符号\n",
    "special_tokens = ['<pad>', '<bos>', '<eos>', '<unk>']\n",
    "\n",
    "\n",
    "# 构建词汇表\n",
    "def build_vocab(sentences):\n",
    "    counter = Counter()\n",
    "\n",
    "    for sentence in sentences:\n",
    "        for word in sentence:\n",
    "            counter[word] += 1\n",
    "\n",
    "    vocab = special_tokens.copy()\n",
    "\n",
    "    for word, count in counter.items():\n",
    "        if word not in special_tokens:\n",
    "            vocab.append(word)\n",
    "\n",
    "    word2idx = {word: idx for idx, word in enumerate(vocab)}\n",
    "    return vocab, word2idx\n",
    "\n",
    "\n",
    "# 构建中英文词汇表\n",
    "zh_vocab, zh_word2idx = build_vocab([sentence for sentence in chinese_sentences])\n",
    "\n",
    "en_vocab, en_word2idx = build_vocab([sentence for sentence in english_sentences])\n",
    "\n",
    "# print(zh_vocab)\n",
    "# print(en_vocab)\n",
    "print(zh_word2idx)\n",
    "print(en_word2idx)"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'<pad>': 0, '<bos>': 1, '<eos>': 2, '<unk>': 3, '你好': 4, '，': 5, '今天天气': 6, '真': 7, '好': 8, '！': 9, '你': 10, '吃饭': 11, '了': 12, '吗': 13, '？': 14, '深度': 15, '学习': 16, '很': 17, '有趣': 18, '。': 19, '我们': 20, '一起': 21, '吧': 22, '这是': 23, '一个': 24, '测试': 25, '例子': 26}\n",
      "{'<pad>': 0, '<bos>': 1, '<eos>': 2, '<unk>': 3, 'hello,': 4, 'the': 5, 'weather': 6, 'is': 7, 'nice': 8, 'today!': 9, 'have': 10, 'you': 11, 'eaten': 12, 'yet?': 13, 'deep': 14, 'learning': 15, 'interesting.': 16, \"let's\": 17, 'study': 18, 'together.': 19, 'this': 20, 'a': 21, 'test': 22, 'example.': 23}\n"
     ]
    }
   ],
   "execution_count": 379
  },
  {
   "cell_type": "code",
   "id": "d2fff714a1743f7",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-07-07T13:46:01.147690Z",
     "start_time": "2025-07-07T13:46:01.143237Z"
    }
   },
   "source": [
    "# 参数设置\n",
    "ZH_VOCAB_SIZE = len(zh_vocab)\n",
    "EN_VOCAB_SIZE = len(en_vocab)\n",
    "HIDDEN_SIZE = 256\n",
    "BATCH_SIZE = 2\n",
    "LEARNING_RATE = 0.005\n",
    "\n",
    "\n",
    "def tokenize(words, word2idx):\n",
    "    # 如果某个词在字典中找不到，则用'<unk>'的索引代替\n",
    "    return [word2idx.get(word, word2idx['<unk>']) for word in words]\n",
    "\n",
    "\n",
    "processed_data_ch = []\n",
    "processed_data_en = []\n",
    "for ch, en in zip(chinese_sentences, english_sentences):\n",
    "    # ch，en分别是一个中文句子和对应的英文句子\n",
    "    # 在每个句子的前面加上'<bos>'，在每个句子的后面加上'<eos>'，这样大模型才能知道什么时候停止生成句子\n",
    "    ch_numerical = tokenize(ch, zh_word2idx)\n",
    "    en_numerical = [en_word2idx['<bos>']] + tokenize(en, en_word2idx) + [en_word2idx['<eos>']]\n",
    "    processed_data_ch.append(torch.LongTensor(ch_numerical))\n",
    "    processed_data_en.append(torch.LongTensor(en_numerical))\n",
    "\n",
    "# print(processed_data_ch)\n",
    "processed_data_en"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[tensor([1, 4, 5, 6, 7, 8, 9, 2]),\n",
       " tensor([ 1, 10, 11, 12, 13,  2]),\n",
       " tensor([ 1, 14, 15,  7, 16,  2]),\n",
       " tensor([ 1, 17, 18, 19,  2]),\n",
       " tensor([ 1, 20,  7, 21, 22, 23,  2])]"
      ]
     },
     "execution_count": 380,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 380
  },
  {
   "cell_type": "code",
   "id": "57a324dbb970a327",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-07-07T13:46:01.161262Z",
     "start_time": "2025-07-07T13:46:01.158254Z"
    }
   },
   "source": [
    "# 对processed_data进行数据填充，对齐长度\n",
    "processed_data_ch_pad = nn.utils.rnn.pad_sequence(processed_data_ch, batch_first=True,\n",
    "                                                  padding_value=zh_word2idx['<pad>'])\n",
    "processed_data_ch_pad"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[ 4,  5,  6,  7,  8,  9],\n",
       "        [10, 11, 12, 13, 14,  0],\n",
       "        [15, 16, 17, 18, 19,  0],\n",
       "        [20, 21, 16, 22, 19,  0],\n",
       "        [23, 24, 25, 26, 19,  0]])"
      ]
     },
     "execution_count": 381,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 381
  },
  {
   "cell_type": "code",
   "id": "713085be4adad395",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-07-07T13:46:01.196835Z",
     "start_time": "2025-07-07T13:46:01.193690Z"
    }
   },
   "source": [
    "# 对processed_data进行数据填充，对齐长度\n",
    "processed_data_en_pad = nn.utils.rnn.pad_sequence(processed_data_en, batch_first=True,\n",
    "                                                  padding_value=en_word2idx['<pad>'])\n",
    "processed_data_en_pad"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[ 1,  4,  5,  6,  7,  8,  9,  2],\n",
       "        [ 1, 10, 11, 12, 13,  2,  0,  0],\n",
       "        [ 1, 14, 15,  7, 16,  2,  0,  0],\n",
       "        [ 1, 17, 18, 19,  2,  0,  0,  0],\n",
       "        [ 1, 20,  7, 21, 22, 23,  2,  0]])"
      ]
     },
     "execution_count": 382,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 382
  },
  {
   "cell_type": "code",
   "id": "98774b884bd6cc05",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-07-07T13:46:01.257163Z",
     "start_time": "2025-07-07T13:46:01.254340Z"
    }
   },
   "source": [
    "\n",
    "from torch.utils.data import DataLoader, TensorDataset\n",
    "\n",
    "dataset = TensorDataset(processed_data_ch_pad, processed_data_en_pad)\n",
    "dataloader = DataLoader(dataset, batch_size=1, shuffle=True)\n",
    "\n",
    "for src, trg in dataloader:\n",
    "    print(src)\n",
    "    print(trg)\n",
    "    break"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor([[15, 16, 17, 18, 19,  0]])\n",
      "tensor([[ 1, 14, 15,  7, 16,  2,  0,  0]])\n"
     ]
    }
   ],
   "execution_count": 383
  },
  {
   "cell_type": "code",
   "id": "e0bb3d119e9e8fc9",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-07-07T13:46:01.814150Z",
     "start_time": "2025-07-07T13:46:01.293049Z"
    }
   },
   "source": [
    "# 编码器\n",
    "class Encoder(nn.Module):\n",
    "    def __init__(self, vocab_size, hidden_size):\n",
    "        super().__init__()\n",
    "        self.embedding = nn.Embedding(vocab_size, hidden_size)\n",
    "        self.rnn = nn.GRU(hidden_size, hidden_size, batch_first=True)\n",
    "\n",
    "    def forward(self, src):\n",
    "        embedded = self.embedding(src)\n",
    "        outputs, hidden = self.rnn(embedded)\n",
    "        return outputs, hidden\n",
    "\n",
    "\n",
    "# 解码器\n",
    "class Decoder(nn.Module):\n",
    "    def __init__(self, vocab_size, hidden_size):\n",
    "        super().__init__()\n",
    "        self.embedding = nn.Embedding(vocab_size, hidden_size)\n",
    "        self.rnn = nn.GRU(hidden_size, hidden_size, batch_first=True)\n",
    "        self.fc_out = nn.Linear(hidden_size, vocab_size)\n",
    "\n",
    "    def forward(self, input, hidden):\n",
    "        embedded = self.embedding(input)\n",
    "        outputs, hidden = self.rnn(embedded, hidden)\n",
    "        return self.fc_out(outputs), hidden\n",
    "\n",
    "\n",
    "# 训练配置\n",
    "encoder = Encoder(ZH_VOCAB_SIZE, HIDDEN_SIZE)\n",
    "decoder = Decoder(EN_VOCAB_SIZE, HIDDEN_SIZE)\n",
    "optimizer = optim.Adam(list(encoder.parameters()) + list(decoder.parameters()), lr=LEARNING_RATE)\n",
    "criterion = nn.CrossEntropyLoss(ignore_index=en_word2idx['<pad>'])\n",
    "\n",
    "for epoch in range(20):\n",
    "    # input： tensor([[4, 5, 6, 7, 8, 9]])\n",
    "    # target：tensor([[1, 4, 5, 6, 7, 8, 9, 2]])\n",
    "    for input, target in dataloader:\n",
    "\n",
    "        _, hidden = encoder(input)\n",
    "\n",
    "        # 准备解码器输入输出，其实这一步可以在数据处理时做掉\n",
    "        decoder_input = target[:, :-1]  # 移除最后一个token  tensor([[1, 4, 5, 6, 7, 8, 9]])\n",
    "        decoder_target = target[:, 1:]  # 移除第一个token    tensor([[4, 5, 6, 7, 8, 9, 2]])\n",
    "\n",
    "        decoder_output, _ = decoder(decoder_input, hidden)\n",
    "\n",
    "        # 计算损失\n",
    "        loss = criterion(\n",
    "            # decoder_output本来是(batch_size, seq_len, vocab_size)，变成(batch_size * seq_len, vocab_size)\n",
    "            # decoder_target本来是(batch_size, seq_len)，变成(batch_size * seq_len)\n",
    "            decoder_output.view(-1, decoder_output.size(-1)),\n",
    "            decoder_target.view(-1)\n",
    "        )\n",
    "\n",
    "        optimizer.zero_grad()\n",
    "        loss.backward()\n",
    "        optimizer.step()\n",
    "\n",
    "        print(f'Epoch {epoch + 1}, Loss: {loss:.4f}')\n"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1, Loss: 3.1396\n",
      "Epoch 1, Loss: 3.3136\n",
      "Epoch 1, Loss: 3.5053\n",
      "Epoch 1, Loss: 3.4855\n",
      "Epoch 1, Loss: 3.7106\n",
      "Epoch 2, Loss: 2.3373\n",
      "Epoch 2, Loss: 0.5443\n",
      "Epoch 2, Loss: 1.1085\n",
      "Epoch 2, Loss: 1.3528\n",
      "Epoch 2, Loss: 0.9174\n",
      "Epoch 3, Loss: 0.6352\n",
      "Epoch 3, Loss: 0.2983\n",
      "Epoch 3, Loss: 0.1709\n",
      "Epoch 3, Loss: 0.2156\n",
      "Epoch 3, Loss: 0.1019\n",
      "Epoch 4, Loss: 0.0771\n",
      "Epoch 4, Loss: 0.0595\n",
      "Epoch 4, Loss: 0.0435\n",
      "Epoch 4, Loss: 0.0630\n",
      "Epoch 4, Loss: 0.1107\n",
      "Epoch 5, Loss: 0.0281\n",
      "Epoch 5, Loss: 0.0337\n",
      "Epoch 5, Loss: 0.0463\n",
      "Epoch 5, Loss: 0.0118\n",
      "Epoch 5, Loss: 0.0147\n",
      "Epoch 6, Loss: 0.0193\n",
      "Epoch 6, Loss: 0.0117\n",
      "Epoch 6, Loss: 0.0110\n",
      "Epoch 6, Loss: 0.0067\n",
      "Epoch 6, Loss: 0.0128\n",
      "Epoch 7, Loss: 0.0082\n",
      "Epoch 7, Loss: 0.0053\n",
      "Epoch 7, Loss: 0.0104\n",
      "Epoch 7, Loss: 0.0065\n",
      "Epoch 7, Loss: 0.0054\n",
      "Epoch 8, Loss: 0.0049\n",
      "Epoch 8, Loss: 0.0052\n",
      "Epoch 8, Loss: 0.0050\n",
      "Epoch 8, Loss: 0.0071\n",
      "Epoch 8, Loss: 0.0034\n",
      "Epoch 9, Loss: 0.0042\n",
      "Epoch 9, Loss: 0.0059\n",
      "Epoch 9, Loss: 0.0039\n",
      "Epoch 9, Loss: 0.0029\n",
      "Epoch 9, Loss: 0.0028\n",
      "Epoch 10, Loss: 0.0034\n",
      "Epoch 10, Loss: 0.0045\n",
      "Epoch 10, Loss: 0.0025\n",
      "Epoch 10, Loss: 0.0024\n",
      "Epoch 10, Loss: 0.0030\n",
      "Epoch 11, Loss: 0.0029\n",
      "Epoch 11, Loss: 0.0036\n",
      "Epoch 11, Loss: 0.0022\n",
      "Epoch 11, Loss: 0.0020\n",
      "Epoch 11, Loss: 0.0027\n",
      "Epoch 12, Loss: 0.0026\n",
      "Epoch 12, Loss: 0.0025\n",
      "Epoch 12, Loss: 0.0029\n",
      "Epoch 12, Loss: 0.0019\n",
      "Epoch 12, Loss: 0.0018\n",
      "Epoch 13, Loss: 0.0027\n",
      "Epoch 13, Loss: 0.0017\n",
      "Epoch 13, Loss: 0.0018\n",
      "Epoch 13, Loss: 0.0022\n",
      "Epoch 13, Loss: 0.0022\n",
      "Epoch 14, Loss: 0.0021\n",
      "Epoch 14, Loss: 0.0015\n",
      "Epoch 14, Loss: 0.0016\n",
      "Epoch 14, Loss: 0.0021\n",
      "Epoch 14, Loss: 0.0023\n",
      "Epoch 15, Loss: 0.0022\n",
      "Epoch 15, Loss: 0.0015\n",
      "Epoch 15, Loss: 0.0019\n",
      "Epoch 15, Loss: 0.0014\n",
      "Epoch 15, Loss: 0.0019\n",
      "Epoch 16, Loss: 0.0014\n",
      "Epoch 16, Loss: 0.0019\n",
      "Epoch 16, Loss: 0.0013\n",
      "Epoch 16, Loss: 0.0020\n",
      "Epoch 16, Loss: 0.0018\n",
      "Epoch 17, Loss: 0.0017\n",
      "Epoch 17, Loss: 0.0012\n",
      "Epoch 17, Loss: 0.0019\n",
      "Epoch 17, Loss: 0.0017\n",
      "Epoch 17, Loss: 0.0013\n",
      "Epoch 18, Loss: 0.0012\n",
      "Epoch 18, Loss: 0.0013\n",
      "Epoch 18, Loss: 0.0016\n",
      "Epoch 18, Loss: 0.0017\n",
      "Epoch 18, Loss: 0.0016\n",
      "Epoch 19, Loss: 0.0012\n",
      "Epoch 19, Loss: 0.0011\n",
      "Epoch 19, Loss: 0.0017\n",
      "Epoch 19, Loss: 0.0015\n",
      "Epoch 19, Loss: 0.0016\n",
      "Epoch 20, Loss: 0.0016\n",
      "Epoch 20, Loss: 0.0016\n",
      "Epoch 20, Loss: 0.0010\n",
      "Epoch 20, Loss: 0.0011\n",
      "Epoch 20, Loss: 0.0014\n"
     ]
    }
   ],
   "execution_count": 384
  },
  {
   "cell_type": "code",
   "id": "392d668e7d115e97",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-07-07T13:46:40.333329Z",
     "start_time": "2025-07-07T13:46:40.326784Z"
    }
   },
   "source": [
    "# 翻译函数\n",
    "def translate(sentence, encoder, decoder):\n",
    "\n",
    "    tokens = tokenize(chinese_split(sentence), zh_word2idx)\n",
    "    src = torch.LongTensor(tokens)\n",
    "\n",
    "    _, hidden = encoder(src)\n",
    "\n",
    "    trg_indexes = [en_word2idx['<bos>']]\n",
    "\n",
    "    for _ in range(50):\n",
    "        trg_tensor = torch.LongTensor([trg_indexes[-1]])\n",
    "\n",
    "        with torch.no_grad():\n",
    "            output, hidden = decoder(trg_tensor, hidden)\n",
    "        pred_token = output.argmax().item()\n",
    "        trg_indexes.append(pred_token)\n",
    "\n",
    "        if pred_token == en_word2idx['<eos>']:\n",
    "            break\n",
    "\n",
    "    return ' '.join([en_vocab[idx] for idx in trg_indexes[1:-1]])\n",
    "\n",
    "\n",
    "# 测试翻译\n",
    "test_sentence = \"我们一起学习\"\n",
    "print(translate(test_sentence, encoder, decoder))"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "let's study together.\n"
     ]
    }
   ],
   "execution_count": 413
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.18"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
